import java.sql.SQLOutput;
import java.util.Scanner;

    public class Test1 {
        //恺撒密码的替换方法是通过排列明文和密文字母表，密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如，当偏移量是左移3的时候（解密时的密钥就是3）：
        //明文字母表：ABCDEFGHIJKLMNOPQRSTUVWXYZ ；
        //密文字母表：DEFGHIJKLMNOPQRSTUVWXYZABC。
        //使用时，加密者查找明文字母表中需要加密的消息中的每一个字母所在位置，并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作，得到原来的明文。例如：
        //明文：THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG ；
        //密文：WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ。
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入加密的偏移值：");
            int num=3;
            System.out.println("请输入需要加密的信息：");
            String str ="THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG";
            System.out.println("加密前的信息是:"+str);
            //实现凯撒加密

            String result="";//定义一个存储加密后信息的空字符串
            for(int i=0;i<str.length();i++){  //使用循环遍历字符串
                if(str.charAt(i)>='A'&&str.charAt(i)<='z'){//判断字符i是否为大写字母，如果是则加密，如果不是，则直接存入result
                    if(str.charAt(i)+num<='Z'){                  //判断字符i加密后是否超出大写字母范围，如果不超，则直接加密，如果超出，则通过-26再偏移的方式进行加密
                        result+=(char)(str.charAt(i)+num);//将明文中的每个字母向右移动num位（即加密），然后逐个存入result中
                    }else{
                        result+=(char)(str.charAt(i)-26+num);//如果字符i移动后超出大写字母范围，则通过-26再向右移动num位的方式进行加密
                    }
                }else{
                    result+=str.charAt(i);//将明文第i个字符直接存入result
                }
            }


            System.out.println("加密后的信息是："+result);//输出加密后信息
        }
    }
